package com.megaspacevr.service;

import com.megaspacevr.entity.AnonymousUsers;
import com.megaspacevr.entity.vo.DeviceInfoVO;
import com.megaspacevr.entity.vo.PageVO;
import com.megaspacevr.entity.vo.UserIdentityVO;
import com.baomidou.mybatisplus.extension.service.IService;
import jakarta.servlet.http.HttpServletRequest;

import java.util.List;

/**
 * <p>
 * 匿名用户表-用于设备识别 服务类
 * </p>
 *
 * @author yezi
 * @since 2025-06-17
 */
public interface AnonymousUsersService extends IService<AnonymousUsers> {

    /**
     * 设备识别 - 获取或创建匿名用户
     * @param deviceInfoVO 设备信息
     * @param request HTTP请求
     * @return 用户身份信息
     */
    UserIdentityVO identifyOrCreateUser(DeviceInfoVO deviceInfoVO, HttpServletRequest request);

    /**
     * 根据设备指纹获取用户信息
     * @param deviceFingerprint 设备指纹
     * @return 匿名用户信息
     */
    AnonymousUsers findByDeviceFingerprint(String deviceFingerprint);

    /**
     * 根据用户Token获取用户信息
     * @param userToken 用户Token
     * @return 匿名用户信息
     */
    AnonymousUsers findByUserToken(String userToken);

    /**
     * 更新用户访问信息
     * @param userId 用户ID
     */
    void updateVisitInfo(Long userId);

    /**
     * 管理员查询匿名用户列表（分页）
     * @param pageNum 页码
     * @param pageSize 页大小
     * @param searchText 搜索文本
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param sortType 排序类型
     * @return 分页结果
     */
    PageVO<AnonymousUsers> getAnonymousUsersForAdmin(Integer pageNum, Integer pageSize, String searchText, 
                                                    String startDate, String endDate, String sortType);

    /**
     * 管理员查询匿名用户列表（用于导出）
     * @param searchText 搜索文本
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param sortType 排序类型
     * @return 匿名用户列表
     */
    List<AnonymousUsers> getAnonymousUsersListForAdmin(String searchText, String startDate, String endDate, String sortType);
}
